#ifndef __DAF_USER_CONTROL_H__
#define __DAF_USER_CONTROL_H__

#include "daf/DeviceAgentMessage.pb.h"

#include <string>

namespace Gazella {
namespace Daf {
class DafUserControl {
private:
    DafUserControl();
    ~DafUserControl();

public:
    static DafUserControl* get_instance();

    //control notify unified entrance
    void control_notify(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);

private:
    
    //lockCtl
    void __control_notify__lockCtl(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //takeoff
    void __control_notify__takeoff(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //return
    void __control_notify__return(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //land
    void __control_notify__land(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //hover
    void __control_notify__hover(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //moveToLocation
    void __control_notify__flyTo(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //moveBySpeed
    void __control_notify__speedM(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //ctlJoy
    void __control_notify__ctlJoy(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //upNavDataAndFly
    void __control_notify__navFly(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //resumeNav
    void __control_notify__resumeNav(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //stopNav
    void __control_notify__stopNav(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //takePhoto
    void __control_notify__takePhoto(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //startVideo
    void __control_notify__startVideo(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //stopVideo
    void __control_notify__stopVideo(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //zoomIn
    void __control_notify__zoomIn(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //zoomOut
    void __control_notify__zoomOut(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //zoomScale
    void __control_notify__zoomScale(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //gimbalFollow
    void __control_notify__gimbalFollow(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //gimbalReset
    void __control_notify__gimbalReset(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //gimbalFreeCtl
    void __control_notify__gimbalFree(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //gimbalLeftCtl
    void __control_notify__gimbalLeft(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //gimbalRightCtl
    void __control_notify__gimbalRight(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //gimbalUpCtl
    void __control_notify__gimbalUp(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //gimbalDownCtl
    void __control_notify__gimbalDown(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //weaponInsuranceSwitch
    void __control_notify__weaponSwitch(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //singleShot
    void __control_notify__sShot(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //runningShot
    void __control_notify__rShot(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //bomb
    void __control_notify__bomb(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //suicideAttack
    void __control_notify__attack(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //attackTargetId
    void __control_notify__attackTar(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //stopAutoMode
    void __control_notify__stopAuto(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //startAutoMode
    void __control_notify__startAuto(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //restartFlyCtrl
    void __control_notify__restartFly(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
    //stopFlyCtrl
    void __control_notify__stopFly(const DeviceAgentModel::DeviceAgentProperty& cmd, DeviceAgentModel::DeviceAgentProperty& ack);
    
};
}
}

#endif